package com.huyun.web.concurrency.immutable;

import com.huyun.web.concurrency.annoations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;
import wiremock.com.google.common.collect.Maps;

import java.util.Collections;
import java.util.Map;

/**
 * java提供Collections工具类，在类中提供了多种不允许修改的方法
 * 介绍了不可变对象，通过在某些情况下，将不能被修改的类对象，设置为不可变对象，来让对象在多个线程间是线程安全的。
 * 归根到底，其实是躲避开了并发的问题。除了不可变对象，还存在一个方法 就是线程封闭
 */

@Slf4j
@ThreadSafe
public class ImmutableExample2 {

    private static Map<Integer, Integer> map = Maps.newHashMap();

    static {
        map.put(1, 2);
        map.put(3, 4);
        map.put(5, 6);
        //处理过后的map是不可以再进行修改的
        map = Collections.unmodifiableMap(map);
    }

    public static void main(String[] args) {
//        map.put(1, 3);
        log.info("{}", map.get(1));
    }

}
